#ifndef __M_UTIL_H__
#define __M_UTIL_H__

// 实用工具类的实现
// 1.获取系统时间
// 2.判断文件是否存在
// 3.获取文件所在路径
// 4.创建目录

#include <iostream>
#include <ctime>
// #include<unistd.h>
#include <sys/stat.h>

using std::string;

namespace mylog
{
    namespace Util
    {
        class Date
        {
        public:
            static time_t now()
            {
                return time(nullptr);
            }
        };

        class File
        {
        public:
            static bool exists(const string &pathname)
            {
                struct stat st;
                if (stat(pathname.c_str(), &st) < 0)
                {
                    return false;
                }
                else
                {
                    return true;
                }
                // return (access(pathname.c_str(),F_OK)==0);//不能跨平台
            }
            static string path(const string &pathname)
            {
                size_t pos = pathname.find_last_of("/\\");
                if (pos == std::string::npos)//该文件在当前目录下
                {
                    return ".";
                }
                else
                {
                    return pathname.substr(0, pos + 1);
                }
            }
            static void createDirectory(const string &pathname)
            {
                //  ./abc/bcd/cde
                size_t pos = 0, idx = 0;//pos用来查找路径分隔符，idx用来调整查找区间
                while (idx < pathname.size())
                {
                    pos = pathname.find_first_of("/\\", idx);
                    if (pos == std::string::npos) // pathname=="abc"没有父级目录或父级目录已创建完毕
                    {
                        mkdir(pathname.c_str(), 0777);//创建父级目录
                    }

                    //递归创建父级目录 
                    string parent_dir = pathname.substr(0, pos + 1);//获取父级目录
                    if (exists(parent_dir) == true)//判断父级目录是否已存在
                    {
                        idx = pos + 1;//调整路径分隔符的查找区间
                        continue;
                    }
                    mkdir(parent_dir.c_str(), 0777);//创建父级目录
                    idx=pos+1;//调整路径分隔符的查找区间
                }
            }
        };
    }
}
#endif